package org.znxs.znxsframe.utils;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * excel 工具类
 */
public class ExcelUtils {


    /**
     * 获取csv文件数据
     *
     * @param multipartFile
     * @return
     */
    public static List<Map<Integer, String>> getCsvData(MultipartFile multipartFile) {
        // 读取数据
        List<Map<Integer, String>> list;
        try {
            list = EasyExcel.read(multipartFile.getInputStream()).excelType(ExcelTypeEnum.XLSX).sheet().headRowNumber(0).doReadSync();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        if (CollectionUtil.isEmpty(list)) return null;
        return list;
    }

    /**
     * 处理获取的csv文件数据
     *
     * @param list
     * @return
     */
    public static String csvCompress(List<Map<Integer, String>> list) {
        if (CollectionUtil.isEmpty(list)) {
            return "";
        }
        StringBuilder result = new StringBuilder();

        // 读取表头 并且进行过滤，对空数据进行过滤
        List<String> headList = list.get(0).values().stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
        result.append(StrUtil.join(",", headList)).append("\n");

        // 读取数据
        for (int i = 1; i < list.size(); i++) {
            Map<Integer, String> data = list.get(i);
            // 获取单行元素  并且对空数据进行过滤
            List<String> singleItem = data.values().stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
            // 进行拼接  并添加到数据列表中
            result.append(StrUtil.join(",", singleItem)).append("\n");
        }
        System.out.println(result);
        return result.toString();
    }

    /**
     * 根据获取的excel 表格获取excel 表头
     * @param list
     * @return
     */
    public static List<String> getHead(List<Map<Integer, String>> list) {
        // 读取表头 并且进行过滤，对空数据进行过滤
        return list.get(0).values().stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
    }

    /**
     * 根据获取的excel 表格获取 所有数据
     * @param list
     * @return
     */
    public static List<List<String>> getRows(List<Map<Integer, String>> list) {
        if (CollectionUtil.isEmpty(list)) return null;
        ArrayList<List<String>> lists = new ArrayList<>();
        // 读取数据
        for (int i = 1; i < list.size(); i++) {
            Map<Integer, String> data = list.get(i);
            // 获取单行元素  并且对空数据进行过滤
            List<String> singleItem = data.values().stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
            lists.add(singleItem);
        }
        return lists;
    }


}
